package com.rockcent.service;

import com.rockcent.common.domain.enumclass.Whether;
import com.rockcent.mall.lib.domain.AuthTitleResource;
import com.rockcent.mall.lib.domain.AuthUserResource;
import com.rockcent.mall.lib.domain.UserMall;
import com.rockcent.mall.lib.domain.enumclass.SystemType;
import com.rockcent.mall.lib.dto.AuthResourceDto;

import java.io.IOException;
import java.util.List;

/**
 * Created by zhangjh on 2017/3/16.
 */
public interface AuthUserResourceSrv {
    /**
     * 批量保存用户权限
     *
     * @param authTitleResourceList
     * @param userId
     * @param adminId
     */
    void batchSave(List<AuthTitleResource> authTitleResourceList, Long userId, Long adminId);

    /**
     * 添加默认菜单权限
     *
     * @param resourceIdList 菜单ID集合
     * @param systemType     系统类型
     */
    void saveAuthUserResourceDefault(List<Long> resourceIdList, SystemType systemType);

    /**
     * 添加M端子账号权限
     *
     * @param authTitleResourceList 职称权限
     * @param userId                用户ID
     * @param mallId                平台ID
     * @param merchantId            商家ID
     */
    void saveAuthUserResource(List<AuthTitleResource> authTitleResourceList, Long userId, Long mallId, Long merchantId);

    /**
     * 更新M端子账号权限
     *
     * @param resourceIdList 菜单ID集合
     * @param mallId         平台ID
     * @param userId         用户ID
     */
    void updateAuthUserResource(List<Long> resourceIdList, Long userId, Long mallId, Long merchantId);

    /**
     * 更新M端子账号权限
     *
     * @param resourceIdList 菜单ID集合
     * @param mallId         平台ID
     * @param userId         用户ID
     */
    void updateAuthUserResourceWhenAddAuthResource(List<Long> resourceIdList, Long userId, Long mallId, Long merchantId);

    /**
     * M或者B的权限树形
     *
     * @param authResourceList     M、B的所有菜单权限
     * @param authUserResourceList M、B所对应拥有的菜单权限
     * @return
     * @throws IOException
     */
    List<AuthResourceDto> authUserResourceTree(List<AuthResourceDto> authResourceList, List<AuthUserResource> authUserResourceList) throws IOException;

    /**
     * 保存用户角色资源
     *
     * @param titleId
     * @param userId
     * @param mallId
     * @param merchantId
     * @param systemType
     */
    void saveAuthTitleResourceAndAuthUserResource(Long titleId, Long userId, Long mallId, Long merchantId, SystemType systemType);

    /**
     * 通过角色ID删除用户资源
     *
     * @param titleId
     * @param systemType
     */
    void deleteAuthUserResourceByTitleId(Long titleId, SystemType systemType);

    /**
     * 通过角色ID更新用户资源
     *
     * @param titleId
     * @param systemType
     */
    void updateAuthUserResourceByTitleId(Long titleId, SystemType systemType);

    /**
     * @param backUrl     后端URL
     * @param frontendUrl 前端URL
     * @return
     */
    List<AuthUserResource> findAuthUserResourceByUrl(String backUrl, String frontendUrl);

    /**
     *
     * @param backUrl 后端URL
     * @param frontendUrl 前端URL
     * @return
     */
    List<Long> findAuthUserIdByUrl(String backUrl, String frontendUrl);

    /**
     *
     * @param mallId
     * @param merchantId
     * @return
     */
    List<Long> findAuthUserIdByMalMerchantIdAndIsSuperAdmin(Long mallId, Long merchantId,Whether isSuperAdmin);
}
